package org.covalence.core;

public interface Constants {

	/* Abstract Types */
	public static final String OBSERVABLE = "org/covalence/core/Observable";
	public static final String OBSERVABLE_TYPE = "L" + OBSERVABLE + ";";
	
	/* Concrete Types */
	public static final String OBJECT = "java/lang/Object";
	
	public static final String COLLECTION = "java/util/Collection";
	
	public static final String LIST = "java/util/List";
	public static final String ARRAY_LIST = "java/util/ArrayList";
	public static final String LINKED_LIST = "java/util/LinkedList";
//	 TODO: add support for legacy "java/util/Vector";
//	 TODO: add support for legacy "java/util/Stack";
	
	public static final String SET = "java/util/Set";
	public static final String HASH_SET = "java/util/HashSet";
	public static final String TREE_SET = "java/util/TreeSet";
	public static final String LINKED_HASH_SET = "java/util/LinkedHashSet";
	public static final String SORTED_SET = "java/util/SortedSet";
	
	public static final String MAP = "java/util/Map";
	public static final String HASH_MAP = "java/util/HashMap";
	public static final String TREE_MAP = "java/util/TreeMap";
	public static final String LINKED_HASH_MAP = "java/util/LinkedHashMap";
	public static final String SORTED_MAP = "java/util/SortedMap";
//	TODO: add support for legacy "java/util/Hashtable"
//	TODO: add support for legacy "java/util/Properties"
	
	public static final String CLIST = "org/covalence/core/util/CList";
	public static final String CSET = "org/covalence/core/util/CSet";
	public static final String CMAP = "org/covalence/core/util/CMap";

	public static final String CTABLE = "org/covalence/core/util/CTable";

	public static final String CPROPERTY_CHANGE_SUPPORT = "org/covalence/core/util/CPropertyChangeSupport";
	public static final String CPROPERTY_CHANGE_SUPPORT_TYPE = "L" + CPROPERTY_CHANGE_SUPPORT + ";";

	/* Field Names */
	public static final String PROPERTY_CHANGE_SUPPORT_FIELD = "_pcs";
	public static final String PARENT_FIELD = "_parent";
	public static final String NESTED_PROPERTY_FIELD = "_nestedPropertyName";
	
	/* Method Signatures */
	public static final String ADD_NESTED_OBSERVABLE_SIG = "(" + OBSERVABLE_TYPE + "Ljava/lang/String;)V";
	public static final String GET_PARENT_SIG = "()Ljava/lang/Object;";
	public static final String SET_PARENT_SIG = "(" + OBSERVABLE_TYPE + ")V";
	public static final String MOVE_LISTENERS_SIG = "(" + OBSERVABLE_TYPE + OBSERVABLE_TYPE + ")V";
}
